<?php
/*
1.定界符//  ##   除了字母、数字和正斜线\以外的任何字符都可以为定界符号
2.原子 img \s
	注意：原子是正则表达式的最基本组成单位，而且必须至少要包含一个原子只要一个正则表达式可以单独使用的字符，就是原子
	1.所有打印（所有可以在屏幕上输出的字符串）和非打印字符（看不到的）
	2.\.\*\? \( \< \>如果所有有意义的字符，想作为原子使用，统统使用“\”转义字符转义m "\"转义字符可以将有意的字符转成没有意义的字符，还可以
		将没有意义的字符转为有意义的字符
	3.在正则表达式中可以直接使用一些代表范围的原子
		\d :表示任意一个十进制的数字
		\D :表示任意一个除数字外的字符
		\s :表示任意一个空白字符，空格、\n\r\t\f
		\S :表示任意一个非空白
		\w :表示任意一个字a-zA-Z0-95
		\W :表示任意一个非字，除了a-zA-Z0-9_
		
	4.自己定义一个原子表[],可以匹配方括号中的任何一个原子
		[a-z5-8]
		[^a-z]表示取反，就是除了原子表中的原子，都可以表示（^必须在[]内的第一个字符处出现）
		
3.元字符* ?
	元字符是一种特殊的字符，是用来修饰原子用的，不可以单独出现
	* ：表示其前的原子可以出现0次或多次
	+ : 表示期 前的原子可以出现1次或多次，不能没有，只少有一个
	? : 表示期 前面的原子可以出现0次或1次
	{}: 用于自己定义前面原子出现的次数 
		{m}  m表示一个整数，{5}表示前面的原子出现5次
		{m,n} m和n表示一个整数，{2,5} m要小于n,表示前面出现的原子，最少m次，最多n次，包括m和n次
		{m,} 表示前面的原子最少出现m次,最多无限
	. : 默认情况下，表示除换行符意一个字符
	  .* 表示任意多的字任
	  .+ 表示至少有一字符
	^ :直接在一个正则表达式的第一个字符出现，则表达必须以这个正则表达式开始
	$ :直接在一个正则表达式的最后一个字符出现，则表达必须以这个正则表达式结束
	| :表示或者的关系,它的优先级别是最低的，最后考虑它的功能
	
	\b:表示一个边界
	\B：表示一个非边界
	():表示一个非边界

		一、()作用：是作为大原子使用
		二、改变优先级，加上括号可以提高优先级别
		三、作为子模式使用,正则表达式不先对一个字符串匹配一次，全部匹配作为一个大模式，放到数组的第一个元素中，每个
		（）是一个子模式按顺序放到数组的其它元素中去。
		四、可以取消子模式，就将（）作为大原子或改变优先级使用,在括号中最前面使用?:就可以取消这个()表示的子模式
		五、反向引用，可以在模式中直接将子模式取出来，再作为正则表达式模式的一部分，如果是在正则表达式像替换涵数中
			preg_replace函数中，可以将子模式取出，在被替换的字符串中使用。

			\1取第一个子模式  \2取第二个子模式， ....  \5 (注意是单引号还是双引号引起来的正则)

			"\\1"  如果是双引号，\解析为转义字符
			'\1'   如果是单引号，则\不解析转义字符

			优先级
			1.\ 
			2.() (?:) []
			3.* +  ？ ｛｝
			4.^ $ \b
			5.|	
	
	
4.模式修正符号 i u
			   "//模式修正符"
			   1.就是几个字母
			   2.可以一次使用一个，每一个具定定的
			   3.是对整个正则表达式调优使用，也可以说是对正则表达式功能的扩展

			   "/abc/" 只能匹配小写字母abc
			   "/abc/i" 可以不区分大小写匹配 

			   i:表示在和模式进行匹配中不区分大小写
			   m:默认情况，将字符串视为一行^ $视为多行后，任何一行都可以以正则开始或结束
			   s:如果没有使用这个模式修正符号时，元字中的“.”默认不能表示换行符号
			   x:表示模式中的空白忽略不计
			   e:正则表达式必须使用在preg_replace替换字符串的涵数中时才可以使用（讲这个涵数再说）
			   A:
			   Z:
			   U:正则表达式的特点：就是比较“贪婪” .* .+所有字都符合这个条件
			   		一种使用模式修正符号U 解决贪婪模式
			   		再一种是使用？完成 .*? .+?
			   		两种同时同用，则 负负得正的效果  又开启了贪婪模式 .*

			   		

"/\<img\s*src=\".*?\"//\>/iU"
"#\<img\s*src=\".*?\"//\>#iU"

/原子和元字符/模式修正符号  /为定界符号 （有一些语言是不需要这个定界符号）
有些语言不支持模式修正符号如javascript

用户名不能为空/^\S+$/
email
url
电话

作业：
将一个网站中的所有图片取出
将一个网站的所有商品取出，

二、学习正则表达式的强大处理函数 
	preg_match();
*/


//$pattern = "/\W/";
//$pattern = '/[a-z5-8]/'; //自已定义一个原子表[]，可以匹配方括号中的任何一个原子
//[a-z5-8]一个区间
//[^a-z] 表示取反，就是除了原子表中的原子，都可以表达（^必须在[]内的第一个字符处出现）


$pattern="/\<b\>(.*?)\<\/b\>/iU" ;//正则表达式模式
$string = "<b>hello</b>aaaa<b>php</b>aacaaaathis is testaaaaa<b>lamp</b>aaaaaa";  //这里就需要如果是：都是：

if(preg_match_all($pattern,$string,$arr))
{
	echo "正则表达式{$pattern}和 字符串{$string}的匹配成功";
	echo '<pre>';
	print_r($arr);
	echo '</pre>';
}else
{
	echo "失败";
}